home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 041 < prev    next >
Internet Message Format  |  1997-05-06  |  67KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-041
  3. Date: Sat, 2 Jul 1994 17:46:50 +0200 (MET DST)
  4.  
  5. C.S.M.P. Digest             Sat, 02 Jul 94       Volume 3 : Issue 41
  6.  
  7. Today's Topics:
  8.  
  9.         Detecting pre-68020 CPU for 68020 code
  10.         Fast Animations (WAS: Fast full screen scrolling: impossible?)
  11.         FlattenMovieData bug???
  12.         Here's how to get OpenDoc
  13.         How to know the cursor is into a polygon?
  14.         PowerPC load-store (was Re: Fast full screen scrolling: impossible?)
  15.         Q: Default button & Return key in Modeless Dialog
  16.         Questions about Tmon?
  17.         Saving PICT files - Here's CODE!!
  18.         Scroll Bars in DLOG?
  19.         Why should't you move baseAddrs?
  20.         cntl-opt-esc
  21.         scroll bars in modal dialogs
  22.  
  23.  
  24.  
  25. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  26. (pottier@clipper.ens.fr).
  27.  
  28. The digest is a collection of article threads from the internet newsgroup
  29. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  30. regularly and want an archive of the discussions.  If you don't know what a
  31. newsgroup is, you probably don't have access to it.  Ask your systems
  32. administrator(s) for details.  If you don't have access to news, you may
  33. still be able to post messages to the group by using a mail server like
  34. anon.penet.fi (mail help@anon.penet.fi for more information).
  35.  
  36. Each issue of the digest contains one or more sets of articles (called
  37. threads), with each set corresponding to a 'discussion' of a particular
  38. subject.  The articles are not edited; all articles included in this digest
  39. are in their original posted form (as received by our news server at
  40. nef.ens.fr).  Article threads are not added to the digest until the last
  41. article added to the thread is at least two weeks old (this is to ensure that
  42. the thread is dead before adding it to the digest).  Article threads that
  43. consist of only one message are generally not included in the digest.
  44.  
  45. The digest is officially distributed by two means, by email and ftp.
  46.  
  47. If you want to receive the digest by mail, send email to listserv@ens.fr
  48. with no subject and one of the following commands as body:
  49.     help                        Sends you a summary of commands
  50.     subscribe csmp-digest Your Name    Adds you to the mailing list
  51.     signoff csmp-digest            Removes you from the list
  52. Once you have subscribed, you will automatically receive each new
  53. issue as it is created.
  54.  
  55. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  56. Questions related to the ftp site should be directed to
  57. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  58. digest are available there.
  59.  
  60. Also, the digests are available to WAIS users.  To search back issues
  61. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  62. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  63.  
  64.  
  65. -------------------------------------------------------
  66.  
  67. >From nagle@netcom.com (John Nagle)
  68. Subject: Detecting pre-68020 CPU for 68020 code
  69. Date: Thu, 16 Jun 1994 16:44:14 GMT
  70. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  71.  
  72.        Now that Symantec C++ is finally generating 68020 code when asked to
  73. do so (for years, that switch did nothing), it's worth nothing that this
  74. creates a problem in C++.
  75.  
  76.        In C programs, even Think C type programs, the first code executed
  77. is in "main", so it's sufficient to check CPU type there.  But in C++,
  78. static constructors run before "main".  Now that TCL is starting to use
  79. constructors, and constructors are starting to work right in SC++, it's
  80. more likely that code with a 68020 instruction might be executed before
  81. "main".
  82.  
  83.        It's hard to deal with this in a way that's guaranteed to work
  84. from the user program.  The check for 68020 needs to be made in
  85. "CODE 1", the startup code block cranked out by the compiler for every
  86. C++ program.  The user can't do this; only Symantec can.
  87.  
  88.        Anybody still care about pre-68020 machines, anyway?
  89.  
  90.                         John Nagle
  91.  
  92. +++++++++++++++++++++++++++
  93.  
  94. >From jwbaxter@olympus.net (John W. Baxter)
  95. Date: Thu, 16 Jun 1994 19:10:32 -0700
  96. Organization: Internet for the Olympic Peninsula
  97.  
  98. In article <nagleCrI15q.Kru@netcom.com>, nagle@netcom.com (John Nagle)
  99. wrote:
  100.  
  101. >        Anybody still care about pre-68020 machines, anyway?
  102.  
  103. I don't, and I have two of them (a Plus, and a first 100-days Mac now in
  104. 512KE form).
  105.  
  106. However, there still are some Mac Portable owners around who do.  By now,
  107. they must be used to programs which claim to require a 68020 or better
  108. crashing on their machine, but it certainly isn't a nice thing to do to
  109. them.
  110.  
  111. Do the constructors for the static objects actually *use* any 68020
  112. instructions on a regular basis?  [Gestalt is available if you really want
  113. to check in each such constructor...or in a phoney or real object you
  114. arrange to have constructed first.]
  115. -- 
  116. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  117.    No hablo Intel.
  118.    jwbaxter@pt.olympus.net
  119.  
  120. +++++++++++++++++++++++++++
  121.  
  122. >From nagle@netcom.com (John Nagle)
  123. Date: Fri, 17 Jun 1994 15:39:19 GMT
  124. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  125.  
  126. jwbaxter@olympus.net (John W. Baxter) writes:
  127. >Do the constructors for the static objects actually *use* any 68020
  128. >instructions on a regular basis?  [Gestalt is available if you really want
  129. >to check in each such constructor...or in a phoney or real object you
  130. >arrange to have constructed first.]
  131.  
  132.       If you do any subscript calculations involving 2D arrays or arrays
  133. of structures, you'll probably use the 32-bit multiply on a 68020.  
  134. On 68000 machines, a subroutine is called for every 32-bit multiply.
  135.  
  136.       You can't have an object you "arrange to have constructed first".
  137. It's a feature of C++ that order of static constructor execution is
  138. random across file boundaries.  ARM 12.6.1.
  139.  
  140.       You can't even call Gestalt from the constructor usefully unless
  141. your class is a base class.  Base class constructors get called first,
  142. so if your class is derived from another class, its constructor will be
  143. called only after the base class constructor has already run.  It
  144. won't help to override functions in the base class, either; the base class
  145. versions will be called when the base class constructor is called.
  146.  
  147.       So there really isn't a sound way to do this.
  148.  
  149.                     John Nagle
  150.  
  151.  
  152.                     John Nagle
  153.  
  154. ---------------------------
  155.  
  156. >From cfranz@home.malg.imp.com (Christian Franz)
  157. Subject: Fast Animations (WAS: Fast full screen scrolling: impossible?)
  158. Date: Thu, 16 Jun 1994 09:14:27 GMT
  159. Organization: Union Bank of Switzerland, CH
  160.  
  161. In article <1994Jun13.212936.24879@dal1>, seanmcd@ac.dal.ca wrote:
  162. > In article <CrCFxp.79K@park.uvsc.edu>, stay@park.uvsc.edu (Steve Taylor) writes:
  163. > > From article <1994Jun12.232257.24853@dal1>, by seanmcd@ac.dal.ca:
  164. > >> I think Chuck Yeager's Air Combat does this too. You can see interlacing
  165. > >> in the terrain if you rock the plane back and forth.
  166. > >> 
  167. > >> Sean
  168. > > 
  169. > > Could someone describe this technique in more detail?  Are you talking
  170. > > about leaving the other lines there and blitting the other half or
  171. > > are you talking about doubling the height of the lines or what?
  172. > > Thanks.
  173. > > 
  174. > Well the description given above makes AstroChase 3D sound like CYAC,
  175. > although the only thing I've seen in AstroChase 3D is the venetian blind
  176. > style, rendering the frame onto every other line. Deliverance also has the
  177. > option to do this, as does a game called Gate. It looks to me like CYAC
  178. > does interlacing, i.e., there are no black lines alternating with the
  179. > graphics, but if you rock the plane
  180. > or turn rapidly, you can see the interlacing effect fairly easy in large
  181. > polygons. 
  182.  
  183. I'm currently developing a 3D space game and of course, I have the same
  184. problems. I have tried many things, among them the alternate line modes
  185. used by Astrochase (draw every other line) and CYAC (draw even lines on
  186. even frames, odd lines on odd frames). 
  187.  
  188. All these algorithms make one main assumption: 
  189. You draw the image in an off-screen buffer and after you are done drawing
  190. it, you blast the image to screen. It usually takes three steps:
  191.  
  192.   1. erase offscreen buffer
  193.   2. draw new frame offscreen
  194.   3. blast offscreen image on-screen.
  195.  
  196. Tuning step 3 can speed up your program, but usually only by 1/6 max 
  197. (optimized blitting is usually one third of the time per frame and I
  198. assume you double the speed of blitting by halving the lines to copy).
  199.  
  200. I have found out that there is a much better method (however, I doubt 
  201. if this technique can be applied to moving backgrounds as is the
  202. main title of this thread). Actually I didn't find out myself but
  203. Juri Munkki, Mac Animations Guru DeLuxe, did. Since my program uses
  204. polygon-oriented graphics, you collect all your polygons as if you 
  205. would draw them. Then you compare them with all polygons drawn in
  206. the last frame and output *the*difference* to screen. This eliminates
  207. the need to erase your offscreen map and since two successive frames 
  208. are usually similar to each other, you just draw a fraction of what
  209. you usually do. Although the overhead for collecting the polygons
  210. is probably a bit more than drawing them, the subsequent elimination 
  211. of 90% that needs to be redrawn makes up for this. Also, if you just
  212. output the difference, this eliminates the need to as this is included 
  213. into the algorithm. 
  214.  
  215. Mhhh. On second thought, this doesn't work at all for a scrolling 
  216. background... But then, neither CYAC nor AC3D have moving background.
  217.  
  218. > I don't know enough about 3D graphics to know whether you could
  219. > actually render even/odd scanlines or whether he's just splitting an 
  220. > off-screen drawing into two blits.
  221.  
  222. Well, I have some experience with 3D graphics and there are to 
  223. fundamental different approaches. On is called object-space, the
  224. other scan-space (well, at least in german. They seem to translate
  225. badly). In object space you calculate all surfaces of the objects 
  226. and project them on your (off)screen using normal projection methods.
  227. To tune your animation you use object coherencies (you take 
  228. advantage of the fact that an object doesn't change much between
  229. two frames). In this algorithm you can't render only for odd lines.
  230. You have to render the whole scene and then transfer every other
  231. line.
  232.  
  233. In scan space you take the inverted approach. For each pixel you
  234. decide which surface is frontmost and set this pixel to the 
  235. appropriate color/texture. To tune this algorithm you can use
  236. scan-line coherencies (the fact that two pixels in any direction
  237. usually don't change much in color, both in x and y direction).
  238. With scan-space, you *can* render every other line directly.
  239.  
  240. The third possibility is a combination of both methods. It's what
  241. Juri's program does (as I suspect. I havn't seen a single line of
  242. his code, but the performance of the demos he sent me leave no
  243. other explanation). You use object space to pre-calculate all
  244. objects (i.e. all vertices that define your surfaces), collect
  245. them to polygons that are not drawn but *mathematically* compared
  246. to the last frame, collect the difference to other polygons and
  247. finally draw the new polygons (using scan coherencies). You
  248. can draw directly to screen since you change so few things that
  249. it seems instantaneous. Juri claims that his algorithm is a
  250. bit faster than the one used in FA-18 (I think they use
  251. a similar approach) and quite frankly, I believe every word
  252. of it.
  253.  
  254. > Sean
  255.  
  256. OK, sorry to have held you up with this rather lengthy discussion
  257. of some arcane and irrelevant topic, but I have spent a lot of
  258. time investigating this and maybe someone can make some use out
  259. of it. Have a nice day.
  260.  
  261.  
  262. Cheers,
  263. Christian
  264.  
  265. - -
  266. Christian Franz                    *       Union Bank of Switzerland, CH
  267. cfranz@home.malg.imp.com     <- at home ->               +41-1-261 26 96
  268.  
  269. ---------------------------
  270.  
  271. >From Frank Manshande <frankm@and.nl>
  272. Subject: FlattenMovieData bug???
  273. Date: Mon, 13 Jun 1994 14:47:53 GMT
  274. Organization: AND Software BV
  275.  
  276. Hi,
  277.  
  278. According to the Q/A in Develop 16 (page 130)...
  279.  
  280. "Since FlattenMovieData" will simply append to a data fork of
  281. a file, you can pass it any data file and it will append the
  282. movie data to that file. Quicktime doesn't care what's stored
  283. before or after the movie data, as long as you don't reposition
  284. the movie data within the data dile."
  285.  
  286. Well, if I try this, and append a movie using FlattenMovieData",
  287. the first 8 bytes will be overwritten with 4 bytes and then 'mdat'.
  288.  
  289. Even if I pass the flag 'flattenAddMovieToDataFork' !
  290.  
  291. It seems like this is a bug! I don't want that data stored before
  292. the movie overwritten. My solution now is to read the first 8
  293. bytes, then FlattenMovieData one or more quicktimes movie files
  294. and then restore the first 8 bytes. But I am not certain that
  295. replacing those 8 bytes won't have any side effects. What I do
  296. is store the "Movie" structure, using PutMovieIntoDataFork at
  297. a specific offset.
  298.  
  299. My datafile looks like this:
  300.  
  301. - -------------------------------
  302. | some data (other than movies) |
  303. - -------------------------------
  304. | flattened movie               |
  305. - -------------------------------
  306. | "Movie" structure             |
  307. - -------------------------------
  308. | flattened movie               |
  309. - -------------------------------
  310. | "Movie" structure             |
  311. - -------------------------------
  312. | flattened movie               |
  313. - -------------------------------
  314. | "Movie" structure             |
  315. - -------------------------------
  316.  
  317. This works. But the first 8 bytes are overwritten in "some data".
  318.  
  319. Any info would be very much appreciated!
  320.  
  321. Frank Manshande
  322. frankm@and.nl
  323.  
  324. +++++++++++++++++++++++++++
  325.  
  326. >From ivanski@world.std.com (Ivan M CaveroBelaunde)
  327. Date: Mon, 13 Jun 1994 18:05:25 GMT
  328. Organization: The World Public Access UNIX, Brookline, MA
  329.  
  330. Frank Manshande <frankm@and.nl> writes:
  331.  
  332. >This works. But the first 8 bytes are overwritten in "some data".
  333.  
  334. What happens is that QT stores the info in a Bento-like atomic form. The
  335. single-fork movie (flattened means "self-contained", not "single-fork").
  336. must contain "atoms" in order for QT to properly navigate it. Atoms are
  337. structured as follows:
  338.  
  339.     {
  340.         long    atomSize;    //    includes atomSize+atomType
  341.         OSType    atomType;
  342.         ... atom specific data ...
  343.     }
  344.  
  345. So for your multimovie file to work it needs to contain atom headers
  346. before each movie data atom of the right size. It also needs an 
  347. atom header in front of your data to allow QT to traverse the movie.
  348. This isn't a bug AFAIK; it seems Develop 16 was wrong in the general
  349. case (you can't just append the movie data for single fork files). If
  350. you control the file format, however, and you can add the atom header
  351. yourself, then it is feasible to do what they say. Given this structure,
  352. however, I'd avoid "restoring" the first 8 bytes as you were doing,
  353. since it's bound to affect your ability to access the multiple movies...
  354.  
  355. Additionally, you might want to check out John Wang's article
  356. in Develop 17 ("Somewhere in QuickTime"), since I seem to remember
  357. there is a bug in FlattenMovieData in which the size field is not
  358. properly set when using multiple movies, and a fix (BetterFlattenMovieData)
  359. is discussed in it.
  360.  
  361. Hope this helps,
  362.  
  363. -Ivan
  364. - -
  365. Ivan Cavero Belaunde (ivanski@world.std.com)
  366. Avid VideoShop Project Lead
  367. Avid Technology, Inc.
  368.  
  369. +++++++++++++++++++++++++++
  370.  
  371. >From Frank Manshande <frankm@and.nl>
  372. Date: Tue, 14 Jun 1994 06:51:11 GMT
  373. Organization: AND Software BV
  374.  
  375. In article <CrCKx2.952@world.std.com> Ivan M CaveroBelaunde,
  376. ivanski@world.std.com writes:
  377. >If you control the file format, however, and you can add the atom header
  378. >yourself, then it is feasible to do what they say. Given this structure,
  379. >however, I'd avoid "restoring" the first 8 bytes as you were doing,
  380. >since it's bound to affect your ability to access the multiple movies...
  381.  
  382. Well,
  383.  
  384. First of all thanks for your time!
  385.  
  386. I have written two small programs. One that adds a movie to ANY kind
  387. of file, and displays the offset of the 'movie resource' using the
  388. PutMovieIntoDataFork call. And another program that can play the movies
  389. at the specified offsets. This does seem to work correctly.
  390.  
  391. The only side-effect I have encountered so far is that the file which
  392. I added the movies to cannot be played by SimplePlayer. SimplePlayer
  393. can play the first movie if I don't save and restore the first 8 bytes
  394. of the file. But because I don't want to play the movies using a
  395. general movie player, but only from my own program, this should not
  396. be a problem.
  397.  
  398. The reason I have to restore the first 8 bytes of the file is that
  399. the quicktime movies are added to a specific database file (the database
  400. file is of proprietary format), and the database engine doesn't work
  401. if the first 8 bytes are overwritten.
  402.  
  403. The reason why I don't just create two seperate files (one with the
  404. database and one with all the quicktime movies) is that our customers
  405. (and our company) only wants ONE file, which contains all the data.
  406.  
  407. Does anybody know if saving and restoring the first 8 bytes that
  408. FlattenMovieData overwrites has any other side effects then not
  409. allowing programs such as SimplePlayer to play a movie?
  410.  
  411. Thanks!
  412.  
  413. Frank Manshande
  414. frankm@and.nl
  415.  
  416. +++++++++++++++++++++++++++
  417.  
  418. >From Peter Vanags <peterv@uclink.berkeley.edu>
  419. Date: 15 Jun 1994 20:43:47 GMT
  420. Organization: UCB
  421.  
  422. In article <CrDKDC.30H@and.nl> Frank Manshande, frankm@and.nl writes:
  423. >Does anybody know if saving and restoring the first 8 bytes that
  424. >FlattenMovieData overwrites has any other side effects then not
  425. >allowing programs such as SimplePlayer to play a movie?
  426.  
  427. Nope, not a problem. The only caveat is you MUST use
  428. NewMoveFromDataFork() with the offset to the 'mdat' or 'moov' atom to
  429. retrieve the movie, if the other data in the data fork is not stored in
  430. "atom" form. 
  431.  
  432. To be clean about using FlattenMovieData(), you should use the following
  433. procedure:
  434.  
  435. - store the first 8 bytes of the data fork
  436. - store the file's length
  437. - append a dummy 'mdat' atom to the end of the data fork
  438. - call FlattenMovieData()
  439. - check the offset to the end of the movie data, which is now 
  440.   in the first 4 bytes of the data fork, compare to the length
  441.   before FlattenMovieData() was called
  442.   and update your dummy atom
  443. - restore the first 8 bytes of the file's data fork
  444.  
  445. I talked with John Wang at MacDTS (author of the "Somewhere in QuickTime"
  446. column in develop) quite a bit about this issue right before he published
  447. the article.
  448.  
  449.  
  450. Peter Vanags
  451. peterv@uclink.berkeley.edu
  452.  
  453. +++++++++++++++++++++++++++
  454.  
  455. >From jywang@apple.com (John Wang)
  456. Date: 16 Jun 1994 00:27:12 GMT
  457. Organization: Apple Computer, Inc.
  458.  
  459. FYI.  The bug fix for the problem described in issue #17 of my article has
  460. been added to QuickTime 2.0.  If you use my BetterFlattenMovie or
  461. BetterFlattenMovieData routine, you will be all set since
  462. BetterFlattenMovie only patches FlattenMovie when QuickTime 1.6.X or
  463. earlier is used.
  464.  
  465. John
  466.  
  467. ---------------------------
  468.  
  469. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  470. Subject: Here's how to get OpenDoc
  471. Date: Wed, 15 Jun 1994 23:30:31 GMT
  472. Organization: Apple Computer
  473.  
  474. I just got off the phone with our evangelist, Mark "Rev. Billy-Bob" Thomas,
  475. to get the true facts about OpenDoc seeding. Here's the scoop.
  476.  
  477. * The current (a6) version of OpenDoc is _not_ going to be distributed more
  478. widely than to the WWDC attendees. They decided against a blanket mailing to
  479. all registered developers because, as Mark put it, "You only get one chance
  480. to make a good first impression". The a6 build is still a bit flaky, requires
  481. MPW, and doesn't come with much in the way of documentation. Their fear was
  482. that, if everybody got it, many would play with it a little, run into
  483. problems, and not look at it again later when things are more polished.
  484.  
  485. * The beta seed _is_ going to be distributed widely. It'll be on the
  486. developer CD. It'll be on the 'develop' bookmark CD, and we're hoping to get
  487. a number of OpenDoc articles in that issue of 'develop'. (Note that anyone
  488. can order single issues of 'develop' from APDA for $10.) This will probably
  489. be in September given the lead time involved in pressing CDs. By that time
  490. the code will be more stable, you'll be able to build with CodeWarrior (hope
  491. hope hope), and there will be at least draft versions of the official
  492. documentation for both OpenDoc and the framework.
  493.  
  494. * But! If you're interested in getting started with OpenDoc _now_ (and how
  495. can I blame you?) you can send mail to OpenDoc@applelink.apple.com and get a
  496. CD with version a6 in return for filling out a short form.
  497.  
  498. * Feel free to post OpenDoc questions here; I'll try to answer them. There is
  499. an OpenDoc mailing list; send mail to <majordomo@cil.org> with body
  500. "subscribe opendoc-interest" to subscribe. There is also a discussion board
  501. on AppleLink somewhere.
  502.  
  503. I hope this answers your questions. Sorry about any misinformation I've
  504. posted in the past ...
  505.  
  506. --Jens Alfke
  507.   jens_alfke@powertalk              Rebel girl, rebel girl,
  508.             .apple.com              Rebel girl you are the queen of my world
  509.  
  510. +++++++++++++++++++++++++++
  511.  
  512. >From chuck@molecule.Physics.Drexel.Edu (Chuck Browne)
  513. Date: Thu, 16 Jun 1994 16:35:00 GMT
  514. Organization: Drexel University
  515.  
  516. Jens Alfke (jens_alfke@powertalk.apple.com) wrote:
  517. : I just got off the phone with our evangelist, Mark "Rev. Billy-Bob" Thomas,
  518. : to get the true facts about OpenDoc seeding. Here's the scoop.
  519.  
  520. : * The beta seed _is_ going to be distributed widely. It'll be on the
  521. : developer CD. It'll be on the 'develop' bookmark CD, and we're hoping to get
  522.  
  523. Thanks, Jens
  524.  
  525. Is there any problem with lending it to Metrowerks for shipping on the
  526. DR4 CD, which roughly comes out at the same time? 
  527. (Not that I'm trying to save a couple of bucks or anything... :-) )
  528.  
  529. Chuck
  530.  
  531.  
  532.  
  533. +++++++++++++++++++++++++++
  534.  
  535. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  536. Date: Thu, 16 Jun 1994 22:55:44 GMT
  537. Organization: Apple Computer
  538.  
  539. Chuck Browne, chuck@molecule.Physics.Drexel.Edu writes:
  540. > Is there any problem with lending it to Metrowerks for shipping on the
  541. > DR4 CD, which roughly comes out at the same time? 
  542.  
  543. I think Mark wants people to go directly to Apple to obtain it. He wants to
  544. keep tabs on how many people have it and who they are (in case we need to
  545. send out any mass mailings, or sell your names and addresses to The Sharper
  546. Image :)
  547.  
  548. > (Not that I'm trying to save a couple of bucks or anything... :-) )
  549.  
  550. I don't think we're charging anything for the OpenDoc seed.
  551.  
  552. --Jens Alfke
  553.   jens_alfke@powertalk              Rebel girl, rebel girl,
  554.             .apple.com              Rebel girl you are the queen of my world
  555.  
  556. +++++++++++++++++++++++++++
  557.  
  558. >From chuck@molecule.Physics.Drexel.Edu (Chuck Browne)
  559. Date: Fri, 17 Jun 1994 00:58:43 GMT
  560. Organization: Drexel University
  561.  
  562. Jens Alfke (jens_alfke@powertalk.apple.com) wrote:
  563. : Chuck Browne, chuck@molecule.Physics.Drexel.Edu writes:
  564. : > Is there any problem with lending it to Metrowerks for shipping on the
  565. : > DR4 CD, which roughly comes out at the same time? 
  566.  
  567. : I think Mark wants people to go directly to Apple to obtain it. He wants to
  568. : keep tabs on how many people have it and who they are (in case we need to
  569. : send out any mass mailings, or sell your names and addresses to The Sharper
  570. : Image :)
  571.  
  572. : > (Not that I'm trying to save a couple of bucks or anything... :-) )
  573.  
  574. : I don't think we're charging anything for the OpenDoc seed.
  575.  
  576. I meant the $10 for develop, but what you say is good to hear. 
  577. (Not that I need OpenDoc or anything, I'm just curious about it and 
  578. what it will mean to software in the next couple of years...
  579. maybe I'll try it out, if I manage to get my PhD on schedule..)
  580.  
  581. Thanks,
  582. Chuck
  583.  
  584.  
  585. : --Jens Alfke
  586. :   jens_alfke@powertalk              Rebel girl, rebel girl,
  587. :             .apple.com              Rebel girl you are the queen of my world
  588.  
  589. ---------------------------
  590.  
  591. >From belanger@bach.ulaval.ca (Yves Belanger)
  592. Subject: How to know the cursor is into a polygon?
  593. Date: Tue, 14 Jun 1994 18:09:32 GMT
  594. Organization: Universite Laval, Ste-Foy (Quebec), Canada
  595.  
  596. Hello,
  597.  
  598. I am writing an application where districts are drawn on a geographic
  599. map. Districts are made with many points, like a polygon in MacDraw.
  600. Each point is given a longitude and a latitude. I have functions that
  601. translate back and forth these coordinates into screen coordinates.
  602.  
  603. My problem is how to determine that a user has clicked inside one of
  604. those polygon or the click was outside them all? If the solution could
  605. work with longitude and latitude, that would be greater, since less
  606. computing would be involved. Thank you.
  607.  
  608. S. Beaudry
  609.  
  610. +++++++++++++++++++++++++++
  611.  
  612. >From Mark Hanrek <hanrek@cts.com>
  613. Date: Tue, 14 Jun 1994 22:49:07 GMT
  614. Organization: The Information Workshop
  615.  
  616. In article <CrEFrx.LDq@athena.ulaval.ca> Yves Belanger,
  617. belanger@bach.ulaval.ca writes:
  618.  
  619. > I am writing an application where districts are drawn on a geographic
  620. > map. Districts are made with many points, like a polygon in MacDraw.
  621. > Each point is given a longitude and a latitude. I have functions that
  622. > translate back and forth these coordinates into screen coordinates.
  623.  
  624. The most common approach is to take advantage of the Macintosh's built-in
  625. region capabilities. They are incredibly powerful, and very easy to use.
  626.  
  627. You can easily take any polygon and create the equivalent region from it,
  628. which is kept in a RegionHandle.
  629.  
  630. Keep a list of these RegionHandles handy, one for each district, and when
  631. the user clicks, take the location of the click and then in a loop use
  632. the PtInRgn() toolbox call to test whether that point is within each of
  633. the regions.  When the result is true, bingo.
  634.  
  635. If there are overlapping regions, be sure they are set up and tested in
  636. front to back order.
  637.  
  638. That's all there is to it, unless I misunderstood your situation.
  639.  
  640. I forget the exact calls to make a region from a polygon, but the whole
  641. process is exceedingly simple.
  642.  
  643. This is the only approach I know of, really.
  644.  
  645. Mark Hanrek
  646.  
  647. +++++++++++++++++++++++++++
  648.  
  649. >From jwbaxter@olympus.net (John W. Baxter)
  650. Date: Tue, 14 Jun 1994 21:09:23 -0700
  651. Organization: Internet for the Olympic Peninsula
  652.  
  653. In article <CrEFrx.LDq@athena.ulaval.ca>, belanger@bach.ulaval.ca (Yves
  654. Belanger) wrote:
  655.  
  656. > Hello,
  657. > I am writing an application where districts are drawn on a geographic
  658. > map. Districts are made with many points, like a polygon in MacDraw.
  659. > Each point is given a longitude and a latitude. I have functions that
  660. > translate back and forth these coordinates into screen coordinates.
  661. > My problem is how to determine that a user has clicked inside one of
  662. > those polygon or the click was outside them all? If the solution could
  663. > work with longitude and latitude, that would be greater, since less
  664. > computing would be involved. Thank you.
  665.  
  666. My approach would be based on creating a QD region which covers the same
  667. "territory" as the polygon, and using the provided PtInRgn call against the
  668. region.  Only if that were not "fast enough" would I probe further.
  669.  
  670. Or...better...switch to QuickDraw GX, where you're likely to be working
  671. with a polygon shape, and you can easily hit-test that (or any other
  672. shape).  That may put things a little more into the future than you want,
  673. though.
  674. -- 
  675. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  676.    No hablo Intel.
  677.    jwbaxter@pt.olympus.net
  678.  
  679. +++++++++++++++++++++++++++
  680.  
  681. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  682. Date: Wed, 15 Jun 1994 22:21:34 GMT
  683. Organization: Apple Computer
  684.  
  685. In article <CrEFrx.LDq@athena.ulaval.ca> Yves Belanger,
  686. belanger@bach.ulaval.ca writes:
  687. > My problem is how to determine that a user has clicked inside one of
  688. > those polygon or the click was outside them all?
  689.  
  690. As has been said, the easiest solution is to create a region of the same
  691. shape as the polygon, then call PtInRegion. This does have the drawback that
  692. regions containing diagonal lines eat up lots of memory. (Think of the
  693. boundary of the region as a polygon, including little stairsteps at pixel
  694. edges on diagonal lines. The region then occupies about two to four bytes per
  695. vertex of that polygon.) Unfortunately, regions larger than 64kbytes will
  696. crash QuickDraw. This shouldn't be a problem unless your polygons are very
  697. large or complex.
  698.  
  699. To create a region from a polygon:
  700. * Call OpenRgn
  701. * MoveTo the first point in the polygon, LineTo each succeeding point. Make
  702. sure to end with a LineTo back to the first point.
  703. * Call CloseRgn.
  704.  
  705. Your other alternative is to use a real "point in polygon" test. You could
  706. either be the four millionth person this month to ask about this on
  707. comp.graphics.algorithms, or you could get a standard computer graphics
  708. textbook like "Computer Graphics: Principles and Practice" by Foley, Van Dam
  709. et al. There may also be source code available by ftp, but I have no idea
  710. where.
  711.  
  712. --Jens Alfke
  713.   jens_alfke@powertalk              Rebel girl, rebel girl,
  714.             .apple.com              Rebel girl you are the queen of my world
  715.  
  716. +++++++++++++++++++++++++++
  717.  
  718. >From mxmora@unix.sri.com (Matt Mora)
  719. Date: 16 Jun 1994 09:28:11 -0700
  720. Organization: SRI International, Menlo Park, CA
  721.  
  722. In article <1994Jun15.222134.21946@gallant.apple.com> Jens Alfke <jens_alfke@powertalk.apple.com> writes:
  723. >In article <CrEFrx.LDq@athena.ulaval.ca> Yves Belanger,
  724. >belanger@bach.ulaval.ca writes:
  725. >> My problem is how to determine that a user has clicked inside one of
  726. >> those polygon or the click was outside them all?
  727. >
  728. >As has been said, the easiest solution is to create a region of the same
  729. >shape as the polygon, then call PtInRegion. This does have the drawback that
  730. >regions containing diagonal lines eat up lots of memory. (Think of the
  731. >boundary of the region as a polygon, including little stairsteps at pixel
  732. >edges on diagonal lines. The region then occupies about two to four bytes per
  733. >vertex of that polygon.) Unfortunately, regions larger than 64kbytes will
  734. >crash QuickDraw. This shouldn't be a problem unless your polygons are very
  735. >large or complex.
  736. >
  737. >To create a region from a polygon:
  738. >* Call OpenRgn
  739. >* MoveTo the first point in the polygon, LineTo each succeeding point. Make
  740. >sure to end with a LineTo back to the first point.
  741. >* Call CloseRgn.
  742. >
  743. >Your other alternative is to use a real "point in polygon" test. You could
  744. >either be the four millionth person this month to ask about this on
  745. >comp.graphics.algorithms, or you could get a standard computer graphics
  746. >textbook like "Computer Graphics: Principles and Practice" by Foley, Van Dam
  747. >et al. There may also be source code available by ftp, but I have no idea
  748. >where.
  749.  
  750.  
  751.  
  752. >From the UMPG Vol II
  753.  
  754. Subject: Re: Point in Polygon routine needed
  755. From: fry@zariski.harvard.edu (David Fry)
  756.  
  757. In article <8fxkxAO00WB7M=nOFO@andrew.cmu.edu> Andrew Lewis Tepper <at15+@andrew.cmu.edu> writes:
  758. >I don't know if this routine is "standard", I just came up with it recently:
  759. >
  760. >For a polygon of points p1...pn, and a point P, make a table as follows:
  761. >
  762. >T(1)= angle from p1 to P to p2
  763. >T(2)= angle from p2 to P to p3
  764. >...
  765. >T(n)= angle from pn to P to p1
  766. >
  767. >express all angles as: -PI < angle < PI.
  768. >
  769. >Add all entries in the table. If the sum = 0, the point is outside. If
  770. >the sum is +/- PI, the point is inside. If the point is +/- xPI, you
  771. >have a strange polygon. If ANY angle was = +/-PI, the point is on the
  772. >border.
  773. >
  774. >Does anyone know if this is considered a good (known?) algorithm? It
  775. >took a long time to come up with!
  776.  
  777. You have the essence of the "good," standard algorithm, but if you're
  778. working with thousands of polygons, those floating point calculations
  779. will be too slow and will probably lead to round-off error at some
  780. point.  Round-off error is a huge pain in computational geometry
  781. problems.  The hard part is finding ways to avoid it.
  782.  
  783. The trick is that you don't need to know the angle between the lines,
  784. you just need to know its sign, called the *circulation*.   For every
  785. line AB in the polygon, form the triangle PAB and you want to know
  786. does it lie inside the polygon or not.  That is, if you were riding a
  787. bike counterclockwise around the boundary of the polygon, would P 
  788. lie on your left or your right when you crossed AB?  You can find this
  789. by calculating PA x PB = (A.x-P.x)*(B.y-P.y) - (A.y-P.y)*(B.x-P.x).
  790. The circulation (the sign of PA x PB) can be found without doing a
  791. multiplication in many cases, but this is good enough.  Remember,
  792. we've oriented the polygon so that you come to A before coming to B as
  793. your traverse its boundary.
  794.  
  795. Then the algorithm is:
  796.  
  797. In = 0
  798. foreach edge AB in the polygon
  799.     if A.y < P.y and B.y >= P.y and PA x PB > 0
  800.         In = In + 1
  801.     if A.y >= P.y and B.y < P.y and PA x PB < 0
  802.         In = In - 1
  803.  
  804. Then if In = 1, P is inside the polygon, and is outside if I = 0. 
  805. This doesn't handle the case where P lies on some edge AB of the
  806. polygon.
  807.  
  808.  
  809. David Fry                                  fry@math.harvard.edu
  810. Division of Applied Sciences               fry@huma1.bitnet
  811. Harvard University                      ...!harvard!huma1!fry
  812. Cambridge, MA  02138            
  813.  
  814.  
  815. - ----------
  816. end of artile
  817.  
  818.  
  819. Xavier
  820.  
  821. -- 
  822. ___________________________________________________________
  823. Matthew Xavier Mora                       Matt_Mora@sri.com
  824. SRI International                       mxmora@unix.sri.com
  825. 333 Ravenswood Ave                    Menlo Park, CA. 94025
  826.  
  827. +++++++++++++++++++++++++++
  828.  
  829. >From Rick Wong <rick@jessica.stanford.edu>
  830. Date: 16 Jun 1994 17:59:54 GMT
  831. Organization: Stanford University
  832.  
  833. In article <CrEFrx.LDq@athena.ulaval.ca> Yves Belanger,
  834. belanger@bach.ulaval.ca writes:
  835. > My problem is how to determine that a user has clicked inside one of
  836. > those polygon or the click was outside them all?
  837.  
  838. One approach is to create an offscreen bitmap with its origin set
  839. up so that the bitmap is centered around the click locaction.  The
  840. bitmap doesn't have to be very big at all, just enough for your hit
  841. tolerance.  For each polygon you want to test, clear the bitmap,
  842. then draw the polygon into it (if you want to see if the point is
  843. inside the polygon, you should draw it with a black fill pattern).
  844. You can then examine the individual bits around the click location
  845. to see if any are set.
  846.  
  847. Of course, such "cleverness" is unnecessary under QuickDraw GX....
  848.  
  849. --Rick Wong
  850.  
  851. ---------------------------
  852.  
  853. >From platypus@cirrus.som.cwru.edu (Gary Kacmarcik)
  854. Subject: PowerPC load-store (was Re: Fast full screen scrolling: impossible?)
  855. Date: 15 Jun 1994 15:23:53 GMT
  856. Organization: Case Western Reserve University, Cleveland, Ohio (USA)
  857.  
  858. In article <1994Jun12.182803.1@west.cscwc.pima.edu> 103t_english@west.cscwc.pima.edu writes:
  859.  
  860. > And finally, what happened to the load/store multiple instructions that are
  861. > (I assume?) faster on the 601, but will probably be slower "in future
  862. > implementations?"
  863.  
  864. the load/store multiple instructions are not faster than a series of loads
  865. and stores (except perhaps if there are stalls from the instruction cache).
  866. they take 1 cycle per load or store.
  867.  
  868. these instructions are present to make saving and restoring registers
  869. (GPRs only) to the stack a little bit easier.  that's really the only benefit
  870. to them.
  871.  
  872. many of the PowerPC architects do not like these instructions because they
  873. do not fit the RISC model very well, thus they complicate the processor
  874. implementation.  don't expect IBM/Motorola to invest much time on these
  875. instructions.  witness the lack of equivalent instructions for floating-
  876. point registers or for 64-bit GPRs.
  877.  
  878. these instructions will become slower when they decide to eliminate them
  879. and handle them via trap-and-emulate. (hey, at least they're telling you
  880. all this up front)
  881.  
  882. -gary j kacmarcik
  883. platypus@cirrus.som.cwru.edu
  884.  
  885. +++++++++++++++++++++++++++
  886.  
  887. >From zstern@adobe.com (Zalman Stern)
  888. Date: Wed, 15 Jun 1994 20:34:44 GMT
  889. Organization: Adobe Systems Incorporated
  890.  
  891. Gary Kacmarcik writes
  892. > the load/store multiple instructions are not faster than a series of loads
  893. > and stores (except perhaps if there are stalls from the instruction  
  894. cache).
  895. > they take 1 cycle per load or store.
  896.  
  897. Which will happen relatively often on the 601. (For example anytime you save  
  898. 8 or more registers, its guaranteed to happen.)
  899.  
  900. > these instructions are present to make saving and restoring registers
  901. > (GPRs only) to the stack a little bit easier.  that's really the only  
  902. benefit
  903. > to them.
  904.  
  905. They improve code density somewhat. Given the size of native apps that's a  
  906. concern.
  907.  
  908. > many of the PowerPC architects do not like these instructions because they
  909. > do not fit the RISC model very well, thus they complicate the processor
  910. > implementation.  don't expect IBM/Motorola to invest much time on these
  911. > instructions.  witness the lack of equivalent instructions for floating-
  912. > point registers or for 64-bit GPRs.
  913.  
  914. Bottom line: the architecture would be better without load/store multiple.  
  915. However since the architects could not reach agreement to remove these  
  916. instructions, the implementors should support them. As it stands now, some  
  917. implementors will makes these instructions competitive and some won't.  
  918. Applications developers will be stuck with a choice which way to go. For  
  919. load/store multiple, this doesn't bother me that much. (One might take a  
  920. minor speed hit to win on code space most places anyway.) However the manual  
  921. says similar things about load/store update instructions vs. using a  
  922. load/store and an add instruction. This causes a much bigger performance  
  923. tradeoff right in the middle of your inner loops. A PowerPC implementation  
  924. where the two instruction sequence is faster than an update form instruction  
  925. would be braindead.
  926. --
  927. Zalman Stern           zalman@adobe.com            (415) 962 3824
  928. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  929. `Wait a second! This is just an octahedron suspended in blue liquid.' - JT
  930.  
  931. +++++++++++++++++++++++++++
  932.  
  933. >From platypus@cirrus.som.cwru.edu (Gary Kacmarcik)
  934. Date: 16 Jun 1994 18:34:53 GMT
  935. Organization: Case Western Reserve University, Cleveland, Ohio (USA)
  936.  
  937. In article <1994Jun15.203444.3373@adobe.com> zstern@adobe.com (Zalman Stern) writes:
  938. >
  939. > Gary Kacmarcik writes
  940. > > these instructions are present to make saving and restoring registers
  941. > > (GPRs only) to the stack a little bit easier.  that's really the only  
  942. > > benefit to them.
  943. >
  944. > They improve code density somewhat. Given the size of native apps that's a  
  945. > concern.
  946.  
  947. but they don't affect code density all that much.  the recommended way
  948. doing the load/store sequence of instructions is to have a series of
  949. loads (or stores) somewhere in the app or OS like
  950.  
  951.    lwz    r13,0(r0)
  952.    lwz    r14,4(r0)
  953.    ...
  954.    lwz    r31,68(r0)
  955.    bcctr
  956.  
  957. (or something like that - i believe that the standard save/restore glue
  958. does a few other things, but i don't have the exact sequence handy).
  959.  
  960. then a function that wants to save a bunch of registers just calculates 
  961. the address of where the first register should be saved and branches to
  962. appropriate lwz instruction.  you have to do this anyway for floating-
  963. point and 64-bit reg's, so it's not a big deal.
  964.  
  965. the end result is that if it's done this way, it won't have a big impact
  966. on code density.  performance is basically to same too, since the branches
  967. (both of which are unconditional) are "free" and the glue code may
  968. already be in the i-cache (from previous functions).
  969.  
  970. -gary j kacmarcik
  971. platypus@cirrus.som.cwru.edu
  972.  
  973. +++++++++++++++++++++++++++
  974.  
  975. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  976. Date: Fri, 17 Jun 1994 04:23:38 +1200 (NZST)
  977. Organization: (none)
  978.  
  979. platypus@cirrus.som.cwru.edu (Gary Kacmarcik) writes:
  980. > many of the PowerPC architects do not like these instructions because they
  981. > do not fit the RISC model very well, thus they complicate the processor
  982. > implementation.  don't expect IBM/Motorola to invest much time on these
  983. > instructions.  witness the lack of equivalent instructions for floating-
  984. > point registers or for 64-bit GPRs.
  985. > these instructions will become slower when they decide to eliminate them
  986. > and handle them via trap-and-emulate. (hey, at least they're telling you
  987. > all this up front)
  988.  
  989. That won't be too bad -- everyone sees it coming, and coming (fairly) soon,
  990. and if you're saving a number of registers the speed hit won't be *that*
  991. horrible (but horrible enough), and most people don't use it inside of
  992. tight loops, and it's no faster than the alternative anyway.
  993.  
  994. The really, *really* horrible one will come when the "load with update"
  995. and "store with update" instructions get the trap-and-emulate treatment.
  996.  
  997. For the non PPC-savvy folk, those instructions get used to implement
  998. the C constructs *++p and *--p (and *p++ and *p-- with a smart optomising
  999. compiler that can transform your code).
  1000.  
  1001. They're used a *lot*, they're a big speed win on the 601 (less on the
  1002. 603 and 604 if you don't mind tying up two units for a load and an addi
  1003. in parallel becasue you've got nothing better to do with them), and they
  1004. occur in speed-critical inner loops.
  1005.  
  1006. -- Bruce
  1007.  
  1008. ---------------------------
  1009.  
  1010. >From efisch@cs.tamu.edu (Eric A Fisch)
  1011. Subject: Q: Default button & Return key in Modeless Dialog
  1012. Date: 16 Jun 1994 18:56:00 GMT
  1013. Organization: Texas A&M Computer Science Department, College Station, TX
  1014.  
  1015. I am working with modeless dialogs and am quite pleased with the
  1016. results. I am having a problem defining a default button and making
  1017. the return (or enter) key activate it. Right now, when the return key
  1018. is pressed it is passed into the active editable text field. I do have
  1019. the OK button at item number 1, but I am clearly missing something. Any
  1020. thoughts?
  1021.  
  1022.  
  1023. Thanks,
  1024. Eric Fisch
  1025. efisch@cs.tamu.edu
  1026.  
  1027. +++++++++++++++++++++++++++
  1028.  
  1029. >From egurney@vcd.hp.com (Eddy J. Gurney)
  1030. Date: Thu, 16 Jun 1994 20:01:29 GMT
  1031. Organization: Hewlett-Packard VCD
  1032.  
  1033. Eric A Fisch (efisch@cs.tamu.edu) wrote:
  1034. >I am working with modeless dialogs and am quite pleased with the
  1035. >results. I am having a problem defining a default button and making
  1036. >the return (or enter) key activate it. Right now, when the return key
  1037. >is pressed it is passed into the active editable text field. I do have
  1038. >the OK button at item number 1, but I am clearly missing something. Any
  1039. >thoughts?
  1040.  
  1041. Yes. After calling IsDialogEvent() from your event loop and determining
  1042. that this is an event for an open modeless dialog, you need to
  1043. "pre-process" the event before passing it on to DialogSelect() and check
  1044. for a "keyDown" or "autoKey" event when theEvent.message & charCodeMask
  1045. is equal to the Enter or Return key and process it appropriately... being
  1046. sure to NOT pass the event on to DialogSelect() afterwards.
  1047.  
  1048. You need to do a similar thing anyway to catch Command-key equivalents,
  1049. which DialogSelect() also just "pushes" through to TEKey...
  1050.  
  1051. --
  1052. Eddy J. Gurney N8FPW   Hewlett-Packard Company, Vancouver (USA!) Division
  1053. egurney@vcd.hp.com                       #include <standard-disclaimer.h>
  1054. "Failures are divided into two classes-- those who thought and never did,
  1055.       and those who did and never thought."     John Charles Salak
  1056.  
  1057. +++++++++++++++++++++++++++
  1058.  
  1059. >From dubois@primate.wisc.edu (Paul DuBois)
  1060. Date: 16 Jun 1994 15:46:39 -0500
  1061. Organization: Castra Parvulorum
  1062.  
  1063. >From article <2tq780$3i8@news.tamu.edu>, by efisch@cs.tamu.edu (Eric A Fisch):
  1064. > I am working with modeless dialogs and am quite pleased with the
  1065. > results. I am having a problem defining a default button and making
  1066. > the return (or enter) key activate it. Right now, when the return key
  1067. > is pressed it is passed into the active editable text field. I do have
  1068. > the OK button at item number 1, but I am clearly missing something. Any
  1069. > thoughts?
  1070.  
  1071. You have to handle it yourself in a modeless dialog.
  1072. -- 
  1073. Paul DuBois
  1074. dubois@primate.wisc.edu
  1075.  
  1076. ---------------------------
  1077.  
  1078. >From apabla@hercules.cs.uregina.ca (jaime apablaza)
  1079. Subject: Questions about Tmon?
  1080. Date: Wed, 01 Jun 1994 03:19:37 GMT
  1081. Organization: University of Regina
  1082.  
  1083. How much does Tmon Pro cost and where can I order it from?  I read in the 
  1084. faq that Tmon has a rather steep learning curve so I was wondering is 
  1085. that because the manual is rather cryptic.  If so are there third party 
  1086. books on using Tmon?  Email preferred.
  1087.  
  1088.  
  1089. +++++++++++++++++++++++++++
  1090.  
  1091. >From hall_j@sat.mot.com (Joseph Hall)
  1092. Date: Wed, 1 Jun 1994 05:42:03 GMT
  1093. Organization: Motorola Inc., Satellite Communications
  1094.  
  1095. Seems it was apabla@hercules.cs.uregina.ca (jaime apablaza) who said:
  1096. >How much does Tmon Pro cost and where can I order it from?  I read in the 
  1097. >faq that Tmon has a rather steep learning curve so I was wondering is 
  1098. >that because the manual is rather cryptic.  If so are there third party 
  1099. >books on using Tmon?  Email preferred.
  1100.  
  1101. I'm not aware of any books on TMON (other than the fairly good documentation
  1102. that comes with it), but at least TMON seems to have a future now.  For a
  1103. while it looked as if it had been dropped on the floor and left for dead.
  1104.  
  1105. The current trend is STRONGLY toward Jasik's The Debugger, though.
  1106. Obviously there is no TMON for PowerPC at this time.
  1107.  
  1108. -- 
  1109. Joseph Nathan Hall | Joseph's Law of Interface Design: Never give your users
  1110. Software Architect | a choice between the easy way and the right way.
  1111. Gorca Systems Inc. |                 joseph@joebloe.maple-shade.nj.us (home)
  1112. (on assignment)    | (602) 732-2549 (work)  Joseph_Hall-SC052C@email.mot.com
  1113.  
  1114. +++++++++++++++++++++++++++
  1115.  
  1116. >From chewy@shell.portal.com (Paul F. Snively)
  1117. Date: 1 Jun 1994 14:26:07 GMT
  1118. Organization: tumbolia.com
  1119.  
  1120. In article <1994Jun01.031937.138522@sue.cc.uregina.ca>
  1121. apabla@hercules.cs.uregina.ca (jaime apablaza) writes:
  1122.  
  1123. > How much does Tmon Pro cost and where can I order it from?  I read in the 
  1124. > faq that Tmon has a rather steep learning curve so I was wondering is 
  1125. > that because the manual is rather cryptic.  If so are there third party 
  1126. > books on using Tmon?  Email preferred.
  1127.  
  1128. I would mail, but others might want to read this, too...
  1129.  
  1130. TMON Pro does have a significant learning curve, as does probably any
  1131. reasonably capable object-level debugger on the Mac.  The Mac is a
  1132. complex beast itself; to create a debugger that can interact with
  1133. heaps, resources, code, registers, etc. is difficult (says a guy who
  1134. used to work at ICOM Simulations, Inc.)
  1135.  
  1136. Having said that, here are my brief pointers for happiness in TMON Pro:
  1137.  
  1138. 1) Whenever you have a TMON Pro window open, note the little square box
  1139. in
  1140.    the upper right corner.  It looks like a zoom box, and in a sense,
  1141. it is:
  1142.    it will expand the window to show a variety of hidden (ugh) options
  1143. for
  1144.    use in that window.
  1145.  
  1146. 2) Learn--and I mean _really_ learn--TMON Pro's expression syntax. 
  1147. Easily
  1148.    90% of the cool things that you can do with TMON involve non-trivial
  1149. use
  1150.    of expressions.  For example, TMON Pro's "Stack Crawl" window is
  1151. just a
  1152.    Memory window with a moderately hairy expression used to crawl up
  1153. the
  1154.    stack.  There's an even hairier expression used to create a Memory
  1155. window
  1156.    that gives the names of all of the windows in the current world
  1157. (hairy to
  1158.    do because the titleHandle is at different offsets in b&w vs. color
  1159.    windows).  In particular, make sure that you fully understand
  1160. delayed vs.
  1161.    immediate evaluation.
  1162.  
  1163. 3) Remember that TMON Pro does, in fact, have a command line. 
  1164. Command-space
  1165.    will open it.  You may think, "but I hate command lines!"  So do I,
  1166. but
  1167.    it's the only way to do certain things in TMON Pro, e.g. type:
  1168.    "Step ´*LongPointer != Æ*LongPointer" (that is, step until the value
  1169. at
  1170.    LongPointer changes).
  1171.  
  1172. Like many old-hand TMON/TMON Pro users, I'm delighted to know that TMON
  1173. Pro for the PowerMac is forthcoming.
  1174.  
  1175. - ---------------------------------------------------------------------
  1176. Paul F. Snively          "Just because you're paranoid, it doesn't mean
  1177. chewy@shell.portal.com    that there's no one out to get you."
  1178.  
  1179. +++++++++++++++++++++++++++
  1180.  
  1181. >From dshayer@netcom.com (David Shayer)
  1182. Date: Wed, 1 Jun 1994 18:21:37 GMT
  1183. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1184.  
  1185. : > How much does Tmon Pro cost and where can I order it from?  I read in the 
  1186. : > faq that Tmon has a rather steep learning curve so I was wondering is 
  1187. : > that because the manual is rather cryptic.  If so are there third party 
  1188. : > books on using Tmon?  Email preferred.
  1189.  
  1190. TMON is a great low level debugger, I don't think its any harder to use
  1191. than Macsbug, and it can certainly be easier to learn than Jasik.
  1192. It comes with 2 manuals, a reference manual and a tutorial.  I simply
  1193. read the tutorial all the way thru, and did all the examples.  It took
  1194. about a week of working every evening.  At the end, I was a TMON master.
  1195. (Well ok, I'm pretty competent with TMON :-)
  1196.  
  1197. There are no books I know of that explain how to use TMON.  However,
  1198. like all low level debuggers, if you don't know what's going on in
  1199. the Mac's guts, you won't know what you're looking at.  I highly
  1200. recommend Scott Knaster's book, How to Write Mac Software.  It actually
  1201. does have some examples in TMON, but in TMON 2.8, which is very old.
  1202.  
  1203. TMON 3.0 is available from APDA (800-282-2732) for $250.
  1204. It suppoessedly has a few quirks on the PowerPC.  Its been bought
  1205. by a new company, which is doing a PPC upgrade, so hopefully we'll
  1206. see a new version of TMON soon.
  1207.  
  1208. +------------------------------------------------------------------------+
  1209. |David Shayer                                  (415) 595-2523            |
  1210. |Sentient Software / Symantec                  shayer@applelink.apple.com|
  1211. |"They're not the best at what they do,        Applelink: SHAYER         |
  1212. | but they're the only ones who do what they do."                        |
  1213. +------------------------------------------------------------------------+
  1214.  
  1215.  
  1216. +++++++++++++++++++++++++++
  1217.  
  1218. >From roberts@insoftware.com (Robert Schwalbe)
  1219. Date: Sat, 11 Jun 1994 09:53:24 -0800
  1220. Organization: IN SOFTWARE
  1221.  
  1222. In article <dshayerCqqDo2.G1y@netcom.com>, dshayer@netcom.com (David
  1223. Shayer) wrote:
  1224.  
  1225. > TMON 3.0 is available from APDA (800-282-2732) for $250.
  1226. > It suppoessedly has a few quirks on the PowerPC.  Its been bought
  1227. > by a new company, which is doing a PPC upgrade, so hopefully we'll
  1228. > see a new version of TMON soon.
  1229.  
  1230. What is the name of this 'new' company, and how would we get in
  1231. contact with them?
  1232.  
  1233. ======================================================================
  1234. Robert Schwalbe                          INET:  roberts@insoftware.com
  1235. IN SOFTWARE                              Voice: 619.743.7502
  1236. 2403 Conway Drive                        Fax:   619.743.7503
  1237. Escondido, CA 92026    
  1238.  
  1239. +++++++++++++++++++++++++++
  1240.  
  1241. >From dshayer@netcom.com (David Shayer)
  1242. Date: Wed, 15 Jun 1994 05:03:14 GMT
  1243. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1244.  
  1245. Robert Schwalbe (roberts@insoftware.com) wrote:
  1246. : In article <dshayerCqqDo2.G1y@netcom.com>, dshayer@netcom.com (David
  1247. : Shayer) wrote:
  1248.  
  1249. : > TMON 3.0 is available from APDA (800-282-2732) for $250.
  1250. : > It suppoessedly has a few quirks on the PowerPC.  Its been bought
  1251. : > by a new company, which is doing a PPC upgrade, so hopefully we'll
  1252. : > see a new version of TMON soon.
  1253.  
  1254. : What is the name of this 'new' company, and how would we get in
  1255. : contact with them?
  1256.  
  1257. The new "company" is really one guy, named Allan Foster.  You
  1258. can reach him at afcguru@aol.com.
  1259.  
  1260. David
  1261.  
  1262.  
  1263. ---------------------------
  1264.  
  1265. >From cconstan@epdiv1.env.gov.bc.ca (Carl B. Constantine)
  1266. Subject: Saving PICT files - Here's CODE!!
  1267. Date: Thu, 16 Jun 1994 07:10:55 -0700
  1268. Organization: Ministry of Environment, Lands & Parks
  1269.  
  1270. Here is some code that works for saving PICT files.  This code was
  1271. developed by a friend of mine, I'm not the author.
  1272.  
  1273. Here you go.
  1274.  
  1275. OK, I have working code for writing a PICT file from a mac Picture.
  1276. The trick is to write the fields of the Picture in the proper order.
  1277. Write 512 zeros, for conformity with old PICT files & MacDraw.
  1278. Then write the picture size, the picture rect, and finally the picture
  1279. opcodes.
  1280.  
  1281.  
  1282. PicHandle macPicture;
  1283. static Point SFPwhere = { 150, 150 };
  1284. static SFReply reply;
  1285.  
  1286. void MakePICTFile ()
  1287. {
  1288.     OSErr iErr;
  1289.     int iFileRef;
  1290.     CQDProcs myProcs;
  1291.     int longZero, i;
  1292.     long longCount = 1;
  1293.     Rect pFrame;
  1294.     PicHandle newPICTHand;
  1295.     short globalRef;
  1296.     Rect temp;
  1297.     int tempSize;
  1298.     
  1299.     SFPutFile ( SFPwhere, "\pSave PICT Plot as:","\pSaved PICT
  1300. Plot",NULL,&reply);
  1301.  
  1302.     if (reply.good)
  1303.     {
  1304.     
  1305.     
  1306.         PleaseWait ();                            /* change to watch cursor */
  1307.         ExerciseOffScreen ();                    /* draw pict in off-screen bitmap */
  1308.         
  1309.         iErr = Create ( reply.fName, reply.vRefNum, 'MKGW', 'PICT' );
  1310.                                                 /* create file */
  1311.         if (iErr != 0)
  1312.         {
  1313.             puts("Error - could not create file\n");
  1314.             return;
  1315.         }
  1316.         
  1317.         iErr = FSOpen ( reply.fName, reply.vRefNum, &globalRef );
  1318.                                                 /* open file */
  1319.  
  1320.         for ( i = 1; i<= 512; i++)                /* write 512 zeros for conformity to
  1321. standard */
  1322.             FSWrite (globalRef, &longCount, 0);
  1323.  
  1324.  
  1325.         longCount = 2;                            /* write picture size */
  1326.         tempSize = (*macPicture)->picSize;
  1327.         FSWrite (globalRef, &longCount, &tempSize);
  1328.         
  1329.         longCount = 8;                            /* write picture rect */
  1330.         temp = (*macPicture)->picFrame;
  1331.         FSWrite (globalRef, &longCount, &temp);
  1332.                                                 /* write picture */
  1333.         longCount = GetHandleSize ((Handle) macPicture);
  1334.         FSWrite (globalRef, &longCount, (Ptr) (*macPicture)+10);
  1335.                                                 /* picture starts 10 bytes from beginning address */
  1336.  
  1337.         FSClose (globalRef);
  1338.     }
  1339.  
  1340. }
  1341.  
  1342.  
  1343. Good luck!
  1344.  
  1345. -- 
  1346. =========================================================================
  1347. Carl B. Constantine                      B.C. Environment, Lands & Parks
  1348. End-User Support Analyst                 CCONSTAN@epdiv1.env.gov.bc.ca
  1349.    PGP Key available if you finger: CCONSTAN@EUSACBC.env.gov.bc.ca
  1350.  
  1351. ---------------------------
  1352.  
  1353. >From nhodulik@hypnos.norden1.com (Nick Hodulik)
  1354. Subject: Scroll Bars in DLOG?
  1355. Date: 6 Jun 1994 03:52:22 GMT
  1356. Organization: Norden 1 Communications
  1357.  
  1358. How does one make scroll bars work in a DLOG resource? I know it has something 
  1359. to do with the CNTL resource, but I can't figure it out. Please help me!
  1360.  
  1361. Nick
  1362.  
  1363. --
  1364. *-----------------------*------------------------------------*---------------*
  1365. |nhodulik@norden1.com   | "This train                        |   *------*    |
  1366. |Norden1 Communications |         is bound                   |    \ GO /     |
  1367. |Nick Hodulik           |              for glory..."         |    TITANS!    |
  1368. |Toledo, OH             |                    -Indigo Girls   |      \/       |      \/       |
  1369. *-----------------------*------------------------------------*---------------*
  1370.  
  1371. +++++++++++++++++++++++++++
  1372.  
  1373. >From Alex Kac <akac@delphi.com>
  1374. Date: Sat, 18 Jun 94 12:57:50 -0500
  1375. Organization: Delphi (info@delphi.com email, 800-695-4005 voice)
  1376.  
  1377. Nick Hodulik <nhodulik@hypnos.norden1.com> writes:
  1378.  
  1379. >How does one make scroll bars work in a DLOG resource? I know it has something 
  1380. >to do with the CNTL resource, but I can't figure it out. Please help me!
  1381. >
  1382. >Nick
  1383.  
  1384. Ok...here is some ol PASCAL source for you (easier to read)
  1385. FUNCTION NewDlogFilter (theDialog: DialogPtr;
  1386.        VAR theEvent: EventRecord;
  1387.        VAR itemhit: integer): boolean;
  1388.  
  1389. first, you need to use a ModalDialogFilter (if you're using a modaldialog)
  1390.  BEGIN
  1391.   setport(theDialog);
  1392.   IF (theEvent.what = update) AND (WindowPtr(theevent.message) <> theDialog) &
  1393. (WindowPeek(WindowPtr(theEvent.message))^.windowkind = dlog) THEN
  1394.    UpdtDialog(theDialog, (WindowPeek(WindowPtr(theEvent.message))^.updateRGN))
  1395.   ELSE IF (theEvent.what = activate) AND (DialogPtr(theEvent.message) <>
  1396. theDialog) THEN
  1397. {Deactivate any window behind....}
  1398.   ELSE
  1399.    CASE theEvent.what OF
  1400. ...do key stuff here....
  1401.     M_Down:
  1402.      BEGIN
  1403.       hitPt := theEVENT.where;
  1404.       GlobalToLocal(hitPt);
  1405.       Ahit := FindControl(hitPt, theDialog, hitControl);
  1406.       IF NOT (hitControl = NIL) THEN
  1407.        BEGIN
  1408.        dhit := FindDitem(theDialog, hitpt) + 1;
  1409.        GetDitem(theDialog, dhit, itemtype, itemhandle, itemrect);
  1410. {here I could have put a contrlAction in each of the 3 controls before I
  1411. started the Dialog, but thought this was the best way}
  1412.        CASE Ahit OF
  1413.        inButton:
  1414.        BEGIN
  1415.        CASE itemtype OF
  1416.        4..6:
  1417.        Ahit := TrackControl(hitControl, hitpt, NIL);
  1418.        7:
  1419.        Ahit := TrackControl(hitCOntrol, hitpt, Pointer(-1));    {since this is a
  1420. button, it can only be a PopUpMenu...}
  1421.        OTHERWISE
  1422.        ;
  1423.        END;
  1424.        CASE dhit OF
  1425. ...buttons and other stuff here....
  1426.        inUpButton:
  1427.        IF NOT (TrackControl(hitControl, hitpt, @UpButtonProc) = 0) THEN
  1428.        BEGIN
  1429.        NewDlogFilter := true;
  1430.        itemhit := dhit;
  1431.        END;
  1432.  
  1433.        inDownButton:
  1434.        IF NOT (TrackControl(hitControl, hitpt, @DownButtonProc) = 0) THEN
  1435.        BEGIN
  1436.        NewDlogFilter := true;
  1437.        itemhit := dhit;
  1438.        END;
  1439.  
  1440.        inThumb:
  1441.        IF NOT (TrackControl(hitControl, hitpt, NIL) = 0) THEN
  1442.        BEGIN
  1443.        ChangeBut(hitcontrol, theDialog);
  1444.        NewDlogFilter := true;
  1445.        itemhit := dhit;
  1446.        END;
  1447.  
  1448.        OTHERWISE
  1449.        ;
  1450.        END;
  1451.        END;
  1452.      END;        {end of MDown}
  1453.  
  1454.  
  1455.  
  1456. By!
  1457.  
  1458. ---------------------------
  1459.  
  1460. >From mburch@ksu.ksu.edu (Matt Burch)
  1461. Subject: Why should't you move baseAddrs?
  1462. Date: 15 Jun 1994 18:19:52 -0500
  1463. Organization: Kansas State University
  1464.  
  1465. Forgive me for sounding obtuse, but what excactly is wrong with
  1466. moving around baseAddrs? What's to prevent you from creating, say,
  1467. a GWorld or other offscreen pixmap with the same dimensions and
  1468. depth as the screen, and then setting the screen's baseAddr to
  1469. the baseAddr of the buffer when you want to draw a frame, instead
  1470. of blasting it into video memory? Am I missing something here?
  1471. Probably.
  1472.  
  1473. - Matt Burch
  1474.  
  1475.  
  1476. +++++++++++++++++++++++++++
  1477.  
  1478. >From kbell@cs.utexas.edu (Kevin Bell)
  1479. Date: Wed, 15 Jun 1994 23:30:38 -0600
  1480. Organization: The University of Texas at Austin, Austin, Texas
  1481.  
  1482. In article <2to2ao$o4k@matt.ksu.ksu.edu>, mburch@ksu.ksu.edu (Matt Burch)
  1483. wrote:
  1484.  
  1485. > Forgive me for sounding obtuse, but what excactly is wrong with
  1486. > moving around baseAddrs? What's to prevent you from creating, say,
  1487. > a GWorld or other offscreen pixmap with the same dimensions and
  1488. > depth as the screen, and then setting the screen's baseAddr to
  1489. > the baseAddr of the buffer when you want to draw a frame, instead
  1490. > of blasting it into video memory? Am I missing something here?
  1491. > Probably.
  1492. > - Matt Burch
  1493.  
  1494. The reason is that PixMaps are a QuickDraw software data structure, which
  1495. has little relation to the underlying video hardware. So if you change the
  1496. screen's baseAddr, QuickDraw commands will draw to the new port (if it
  1497. doesn't crash, I've never tried this), but the video hardware will continue
  1498. to fetch screen data from the old address.
  1499.  
  1500. -- 
  1501. Kevin Bell
  1502. kbell@cs.utexas.edu
  1503.  
  1504. ---------------------------
  1505.  
  1506. >From valentin+@pitt.edu (Shawn V. Hernan)
  1507. Subject: cntl-opt-esc
  1508. Date: 14 Jun 1994 00:19:12 GMT
  1509. Organization: The University of Pittsburgh
  1510.  
  1511. Greetings all, 
  1512.  
  1513.    Once again, I turn to the wisdom of the net...
  1514.  
  1515.    Is there any way to programatically intercept the cnt-alt-esc
  1516. keysequence? You know, the one that asks you if you really want to
  1517. force such and such to quit. I thought this was an AppleEvent, but
  1518. apparantly not....
  1519.  
  1520.  
  1521. Is this a FAQ? Do I have to resort to testing for that in my keyDown
  1522. events? 
  1523.  
  1524. Any help is deeply appreciated, 
  1525.  
  1526. Thanks, 
  1527. Shawn
  1528.  
  1529.  
  1530.  
  1531. Shawn Valentine Hernan       |Is the War on Drugs worth it?  
  1532. The University of Pittsburgh |Why does the government want your guns?  
  1533. valentin+@pitt.edu           |Does RICO ring a bell?   
  1534. 412-624-6425                 |Did you vote in the last election?
  1535.  
  1536. +++++++++++++++++++++++++++
  1537.  
  1538. >From Steve Maller <maller@genmagic.com>
  1539. Date: 14 Jun 1994 19:39:26 GMT
  1540. Organization: General Magic
  1541.  
  1542. In article <2tit20$59e@usenet.srv.cis.pitt.edu> Shawn V. Hernan,
  1543. valentin+@pitt.edu writes:
  1544. >   Is there any way to programatically intercept the cnt-alt-esc
  1545. >keysequence? You know, the one that asks you if you really want to
  1546. >force such and such to quit. I thought this was an AppleEvent, but
  1547. >apparantly not....
  1548. >
  1549. >Is this a FAQ? Do I have to resort to testing for that in my keyDown
  1550. >events? 
  1551.  
  1552. No dice. It's a pretty low level system patch (to PostEvent, I think)
  1553. so you'd have to patch PostEvent yourself and filter it out.
  1554. - ---------------------------------------------------------------
  1555. Steve Maller
  1556. Husband & Father
  1557. General Magic, Inc.
  1558.  
  1559. +++++++++++++++++++++++++++
  1560.  
  1561. >From mxmora@unix.sri.com (Matt Mora)
  1562. Date: 14 Jun 1994 15:33:11 -0700
  1563. Organization: SRI International, Menlo Park, CA
  1564.  
  1565. In article <2tl11e$lu0@gatekeep.genmagic.com> Steve Maller <maller@genmagic.com> writes:
  1566. >In article <2tit20$59e@usenet.srv.cis.pitt.edu> Shawn V. Hernan,
  1567. >valentin+@pitt.edu writes:
  1568. >>   Is there any way to programatically intercept the cnt-alt-esc
  1569. >>keysequence? You know, the one that asks you if you really want to
  1570. >>force such and such to quit. I thought this was an AppleEvent, but
  1571. >>apparantly not....
  1572. >>
  1573. >>Is this a FAQ? Do I have to resort to testing for that in my keyDown
  1574. >>events? 
  1575.  
  1576. Here you go from the up and coming UMPG volume II. 
  1577. (yes I'm actually working on it)
  1578.  
  1579.  
  1580.  
  1581.  
  1582. Subject: No Option Escape code
  1583. From: Manuel Veloso <veloso@husc9.harvard.edu>
  1584. Distribution: world
  1585.  
  1586. Someone a while back wanted code for killing off Force-Quit. Well, here's
  1587. one I found on CIS (I think) a few weeks ago. It works(!). It's in MPW
  1588. assembly, but 95% of it is the generic init install/patch. For anyone
  1589. doing
  1590. standalone systems (kiosks), well, you know...
  1591.  
  1592. ;    NoEscape.a
  1593.                 
  1594.                 include    'Traps.a'
  1595.  
  1596.                 machine    mc68000
  1597.                 case    obj
  1598.  
  1599. INITEntry        proc    export
  1600.                 
  1601.                 lea        EndPatch,a0
  1602.                 lea        StartPatch,a1
  1603.                 sub.l    a1,a0
  1604.                 move.l    a0,d0
  1605.                 move.l    a0,d3
  1606.                 _NewPtr sys
  1607.                 move.l    a0,d4
  1608.                 beq.s    NoPatch
  1609.                 
  1610.                 move.l    a0,a1
  1611.                 lea        StartPatch,a0
  1612.                 move.l    d3,d0
  1613.                 _BlockMove
  1614.  
  1615.                 move.w    #$a9c9,d0
  1616.                 _GetTrapAddress newTool
  1617.                 lea        RealSysError,a1
  1618.                 move.l    a0,(a1)
  1619.                 move.w    #$a9c9,d0
  1620.                 move.l    d4,a0
  1621.                 _SetTrapAddress newTool
  1622. NoPatch
  1623.                 rts
  1624.  
  1625. StartPatch        cmpi.w    #$4e22,d0
  1626.                 beq.s    NoThanks
  1627.                 move.l    RealSysError,-(sp)
  1628. NoThanks
  1629.                 rts
  1630.  
  1631. RealSysError    ds.l    1
  1632.  
  1633. EndPatch        equ        *
  1634.  
  1635.                 endp
  1636.  
  1637.                 end
  1638. -- 
  1639. ___________________________________________________________
  1640. Matthew Xavier Mora                       Matt_Mora@sri.com
  1641. SRI International                       mxmora@unix.sri.com
  1642. 333 Ravenswood Ave                    Menlo Park, CA. 94025
  1643.  
  1644. +++++++++++++++++++++++++++
  1645.  
  1646. >From Greg_Marriott@genmagic.com (Greg Marriott)
  1647. Date: Wed, 15 Jun 1994 06:21:07 -0800
  1648. Organization: General Magic, Inc.
  1649.  
  1650. Steve Maller <maller@genmagic.com> wrote:
  1651. > valentin+@pitt.edu writes:
  1652. > >   Is there any way to programatically intercept the cnt-alt-esc
  1653. > >keysequence?> 
  1654. > No dice. It's a pretty low level system patch (to PostEvent, I think)
  1655. > so you'd have to patch PostEvent yourself and filter it out.
  1656.  
  1657. Or you could patch SysError and intercept the dialog just before it comes
  1658. up, pretending the user hit cancel.
  1659.  
  1660. -- 
  1661. Greg Marriott
  1662. Just Some Guy
  1663. General Magic, Inc.
  1664.  
  1665. Disclaimer: My opinions are not necessarily the same as General Magic's.
  1666.             (can a company even HAVE an opinion?)
  1667.  
  1668. +++++++++++++++++++++++++++
  1669.  
  1670. >From Dave Falkenburg <falken@apple.com>
  1671. Date: Wed, 15 Jun 1994 16:14:42 GMT
  1672. Organization: Apple Computer, Inc.
  1673.  
  1674. In article <Greg_Marriott-150694062108@internet-macip-45.genmagic.com>
  1675. Greg Marriott, Greg_Marriott@genmagic.com writes:
  1676. >Steve Maller <maller@genmagic.com> wrote:
  1677. >> valentin+@pitt.edu writes:
  1678. >> >   Is there any way to programatically intercept the cnt-alt-esc
  1679. >> >keysequence?> 
  1680. >> No dice. It's a pretty low level system patch (to PostEvent, I think)
  1681. >> so you'd have to patch PostEvent yourself and filter it out.
  1682. >
  1683. >Or you could patch SysError and intercept the dialog just before it comes
  1684. >up, pretending the user hit cancel.
  1685.  
  1686. SysError(20002) is how force-quit happens.
  1687.  
  1688. As Greg said, just patch it to just RTS when the error code is 20002,
  1689. otherwise call through.
  1690.  
  1691. -Dave Falkenburg
  1692. -Apple Computer, Inc.
  1693.  
  1694. ---------------------------
  1695.  
  1696. >From fadushin@top.cis.syr.edu (Fred Dushin)
  1697. Subject: scroll bars in modal dialogs
  1698. Date: Thu, 16 Jun 1994 15:44:22 GMT
  1699. Organization: Syracuse University, CIS Dept.
  1700.  
  1701. >From what I gather from Inside Mac (old volume I and 
  1702. Toolbox Essentials), I need to handle mouseDown events
  1703. in scroll bars in modal dialogs with a filter proc.  I.e.,
  1704. ModalDialog does not return the part code for the control,
  1705. just the controlID.
  1706.  
  1707. Is that so?  If so, does someone have a sample filter procedure
  1708. that handles scroll bars I can scavange from?  Braaa.
  1709.  
  1710.  
  1711. Fred Dushin
  1712. Syracuse, NY
  1713.  
  1714. +++++++++++++++++++++++++++
  1715.  
  1716. >From Here@There (Someone)
  1717. Date: 17 Jun 1994 16:47:46 GMT
  1718. Organization: Large Fuzzy Room
  1719.  
  1720. In article <1994Jun16.154422.1710@newstand.syr.edu>,
  1721. fadushin@top.cis.syr.edu (Fred Dushin) wrote:
  1722. > Is that so?  If so, does someone have a sample filter procedure
  1723. > that handles scroll bars I can scavange from?  Braaa.
  1724. DialogBits 2.0.1 does this, it's on the DevCD and the ftp site.  Here's the
  1725. relevant code from the filter proc that tracks the scroll
  1726. control.............
  1727. // cut and paste into MPW to view right
  1728. // inside your filter proc
  1729. GetDItem(inputDialog, kScrollControlItem, &tempItem, &tempHandle,
  1730. &tempRect);
  1731.     if (PtInRect(mousePoint, &tempRect)) {
  1732.         /* We're in the scroll bar. */
  1733.         /* Now, what does that mean???? */
  1734.         /* Well, the Dialog Manager will automatically call FindControl and
  1735. TrackControl */
  1736.         /* and set the control value (in the case of scroll thumbs) */
  1737.         /* on controls added to your dialog, and in many cases that's all you're
  1738. going */
  1739.         /* to need. */
  1740.         /* But, ModalDialog does NOT pass back a part code, so if the userPerson
  1741. */
  1742.         /* clicked on the thumb or arrows of the scroll bar, you won't know,
  1743. you'll */
  1744.         /* just know that the  scroll bar was clicked in.*/
  1745.         /* That's not enough, so we'll to an initial check to see where the
  1746. control */
  1747.         /* was hit */
  1748.         thePart = FindControl(mousePoint, inputDialog, &returnedControl);
  1749.         /* if the hit was in an arrow or page area, we'll handle it ourselfs */
  1750.         if (thePart != inThumb) {
  1751.             TrackControl(returnedControl, mousePoint, (ProcPtr)DoScrollArrows);
  1752.             returnVal = true;
  1753.         }
  1754.         /* if it was in the thumb, we'll just fall through and let the Dialog
  1755. Manager */
  1756.         /* handle it for us */
  1757.     }
  1758.  
  1759.  
  1760.  
  1761.  
  1762. /* This little routine adjusts the scroll bar during TrackControl */
  1763. pascal void DoScrollArrows(ControlHandle theControl, short thePart)
  1764. {
  1765.     short currentVal = GetCtlValue(theControl);
  1766.     short offSet = 0;
  1767.     switch (thePart) {
  1768.         case inUpButton:
  1769.             offSet = -1;
  1770.             break;
  1771.         case inDownButton:
  1772.             offSet = 1;
  1773.             break;
  1774.         case inPageUp:
  1775.             offSet = -3;
  1776.             break;
  1777.         case inPageDown:
  1778.             offSet = 3;
  1779.             break;
  1780.             
  1781.     }
  1782.     /* set the control value to the new one, as long as it doesn't pass
  1783. limits */
  1784.     currentVal += offSet;
  1785.     if (currentVal < 1)
  1786.         currentVal = 1;
  1787.     if (currentVal > 10)
  1788.         currentVal = 10;
  1789.     SetCtlValue(theControl, currentVal);
  1790.     
  1791. } /* end DoScrollArrows */
  1792.  
  1793. <TR>
  1794. Somewhere, sometime
  1795.  
  1796. SPA FON
  1797.  
  1798. ---------------------------
  1799.  
  1800. End of C.S.M.P. Digest
  1801. **********************
  1802.  
  1803.  
  1804.  
  1805.